package com.ahorresas.modelo.daos;

import com.ahorresas.conexion.Conexion;
import com.ahorresas.modelo.beans.DetalleAhorroBean;
import com.ahorresas.modelo.sqls.DetalleAhorroSql;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class DetalleAhorroDao {
    
    Conexion conexion = new Conexion();
    Connection con;
    DetalleAhorroSql sql = new DetalleAhorroSql();
    
    public DetalleAhorroBean buscarDetalleAhorro(String idDetalleAhorro){
        con = conexion.getConexion();
        DetalleAhorroBean detalleAhorro = null;
        try {
            PreparedStatement ps = con.prepareStatement(sql.buscarDetalleAhorro());
            ps.setString(1, idDetalleAhorro);
            
            ResultSet resultado = ps.executeQuery();
            if(resultado.next()){
                detalleAhorro = new DetalleAhorroBean();
                detalleAhorro.setIdDetalle(resultado.getInt("id_detalle"));
                detalleAhorro.setIdAhorro(resultado.getInt("id_ahorro"));
                detalleAhorro.setMes(resultado.getInt("mes"));
                detalleAhorro.setValorAhorro(resultado.getDouble("valor_ahorro"));
            }
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }
        finally{
            conexion.cerrarConexion(con);
        }
        return detalleAhorro;
    }
    
    public List<DetalleAhorroBean> listarDetalleAhorros(){
        con = conexion.getConexion();
        List<DetalleAhorroBean> listaDetalleAhorros = new ArrayList<>();
        DetalleAhorroBean detalleAhorro = null;
        try {
            PreparedStatement ps = con.prepareStatement(sql.listarDetalleAhorros());
            ResultSet resultado = ps.executeQuery();
            while(resultado.next()){
                detalleAhorro = new DetalleAhorroBean();
                detalleAhorro.setIdDetalle(resultado.getInt("id_detalle"));
                detalleAhorro.setIdAhorro(resultado.getInt("id_ahorro"));
                detalleAhorro.setMes(resultado.getInt("mes"));
                detalleAhorro.setValorAhorro(resultado.getDouble("valor_ahorro"));
                
                listaDetalleAhorros.add(detalleAhorro);
            }
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        } finally{
            conexion.cerrarConexion(con);
        }
        return listaDetalleAhorros;
    }
    
    public int crearDetalleAhorro(DetalleAhorroBean detalleAhorro){
        con = conexion.getConexion();
        int resultado = 0;
        try {
            PreparedStatement ps = con.prepareStatement(sql.crearDetalleAhorro());
            ps.setInt(1, detalleAhorro.getIdAhorro());
            ps.setInt(2, detalleAhorro.getMes());
            ps.setDouble(3, detalleAhorro.getValorAhorro());
            
            resultado = ps.executeUpdate();
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        } finally {
            conexion.cerrarConexion(con);
        } 
        return resultado;
    }
    
    public int modificarDetalleAhorro(DetalleAhorroBean detalleAhorro){
        con = conexion.getConexion();
        int resultado = 0;
        try {
            PreparedStatement ps = con.prepareStatement(sql.modificarDetalleAhorro());
            ps.setInt(1, detalleAhorro.getIdAhorro());
            ps.setInt(2, detalleAhorro.getMes());
            ps.setDouble(3, detalleAhorro.getValorAhorro());
            ps.setInt(4, detalleAhorro.getIdDetalle());
            
            resultado = ps.executeUpdate();
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        } finally {
            conexion.cerrarConexion(con);
        }
        return resultado;
    }
    
    public int eliminarDetalleAhorro(Integer idDetalleAhorro){
        con = conexion.getConexion();
        int resultado = 0;
        try {
            PreparedStatement ps = con.prepareStatement(sql.eliminarDetalleAhorro());
            ps.setInt(1, idDetalleAhorro);
            
            resultado = ps.executeUpdate();
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        } finally {
            conexion.cerrarConexion(con);
        }
        return resultado;
    }
}